package com.atguigu.srb.core;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.jupiter.api.Test;

/**
 * @Description:
 * @Author: Gavin
 * @Date: 6/30/2023 5:38 PM
 */
//不需要注入容器里面
public class CodeGenerator {
    @Test
    public void genCode(){
        //1.创建代码生成器
        AutoGenerator mpg = new AutoGenerator();
        //2.全局配置
        GlobalConfig gc = new GlobalConfig();
        //3.获取当前的工作路径 user.dir就是当前的工作路径  D:\OneDrive\AtGuiGu\JavaDevelop\srb\srb-core
        String projectPath = System.getProperty("user.dir");
        //配置生成的文件保存的项目路径
        gc.setOutputDir(projectPath + "/src/main/java");
        gc.setAuthor("Atguigu");
        gc.setOpen(false);//生成后是否打开资源管理器
        gc.setServiceName("%sService");//去掉Service接口的首字母I
        gc.setIdType(IdType.ASSIGN_ID);//主键策略 使用雪花算法
        gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型使用java.util.Data
        gc.setSwagger2(true);//开启Swagger2模式
        mpg.setGlobalConfig(gc);
        //3.配置数据源
        DataSourceConfig dsc = new DataSourceConfig();
        //数据库连接地址
        dsc.setUrl("jdbc:mysql://localhost:3306/srb_core?serverTimezone=GMT%2B8&characterEncoding=utf-8");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        dsc.setDbType(DbType.MYSQL);
        mpg.setDataSource(dsc);
        //4.包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.atguigu.srb.core");
        pc.setEntity("entity");//此对象与数据库表结构一一对应,通过DAO层向上传输数据源对象
        mpg.setPackageInfo(pc);
        //5.策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
        strategy.setEntityLombokModel(true); // lombok
        strategy.setLogicDeleteFieldName("is_deleted");//逻辑删除字段名
        strategy.setEntityBooleanColumnRemoveIsPrefix(true);//去掉布尔值的is_前缀（确保tinyint(1)）
        strategy.setRestControllerStyle(true); //restful api风格控制器
        mpg.setStrategy(strategy);
        // 6、执行
        mpg.execute();

    }
}
